/* Copyright 2011 Elektrobit Wireless Communications Oy (EB)


  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License version 2 as 
  published by the Free Software Foundation.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License along
  with this program; if not, write to the Free Software Foundation, Inc.,
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.


 *All rights reserved 
 *Version:Elektrobit_Qt_1.0.0_20110305 */


#include "abstractscreenmanager.h"
#include <QMutex>
#include <QScopedPointer>

#ifndef Q_OS_SYMBIAN
#else
#include "symbianscreenmanager.h"
#endif

namespace EB
{
    static QMutex __screenManagerMutex ;
    static QScopedPointer<AbstractScreenManager> __screenManagerInstance(0);

    AbstractScreenManager::AbstractScreenManager(QObject *parent) :
        QObject(parent)
    {
    }

}

EB::AbstractScreenManager * EB::AbstractScreenManager::instance()
{
    if(!__screenManagerInstance) {
        __screenManagerMutex.lock();

        if(!__screenManagerInstance) {
#ifndef Q_OS_SYMBIAN
#   warning ScreenManager has no implementation on current platform. Your application may crash!
#else
            __screenManagerInstance.reset(new SymbianScreenManager);
#endif
        }
        __screenManagerMutex.unlock();
    }

    return __screenManagerInstance.data();
}

void EB::AbstractScreenManager::setScreenMode(EB::AbstractScreenManager::ScreenMode mode)
{
    switch(mode) {
    case PortraitMode:
        setPortraitMode();
        break;
    case LandScapeMode:
        setLandScapeMode();
        break;
    default:
        Q_ASSERT_X(0, "AbstractScreenManager::setScreenMode",
                   "Unsupportted screen mode!");
        break;
    }
}

